<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div>
    <button onclick="getDate()">请求1</button>

    <button onclick="cancelReq()">取消请求</button><br>
  </div>
  <script src="../js/axios.js"></script>
  <script>
    console.log(axios)
    axios.interceptors.request.use((config) => {
      // 在准备发请求前, 取消未完成的请求
      console.log(config)

      if (typeof cancel==='function') {
          cancel('取消请求')
      }
      // 添加一个cancelToken的配置
      config.cancelToken = new axios.CancelToken((c) => { // c是用于取消当前请求的函数
        // 保存取消函数, 用于之后可能需要取消当前请求
        cancel = c
      })

      return config
    })
    
    // 添加响应拦截器
    axios.interceptors.response.use(
      response => {
        cancel = null
        return response
      },
      error => {
        if (axios.isCancel(error)) {// 取消请求的错误
          // cancel = null
          console.log('请求取消的错误', error.message) // 做相应处理
          // 中断promise链接
          return new Promise(() => {})
        } else { // 请求出错了
          cancel = null
          // 将错误向下传递
          // throw error
          return Promise.reject(error)
        }
      }
    )
    
    let cancel 

    function getDate() {
      axios.get('https://jsonplaceholder.typicode.com/comments', {
        params: {
          postId: 1
        }
      }).then(
      res => {
        console.log(res);
      },
      err => {// 只用处理请求失败的情况, 取消请求的错误的不用
        console.log('请求1失败了', error.message)          
      });
    }
    function cancelReq() {
      // alert('取消请求')
      // 执行取消请求的函数
      if (typeof cancel === 'function') {
        cancel('强制取消请求')
      } else {
        console.log('没有可取消的请求')
      }
    }
  </script>
</body>

</html>